// hdu4315
// 题意：有一个竖着的一维棋盘，从上到下标为0, 1, 2, 3, 4...0是山顶
//       现在告诉你n(<=1000)个棋子的位置，其中有一个是王。aliceh和bob
//       轮流移动棋子，移动的规则就是选择一个棋子往上移，但是不能超过
//       它上面的棋子，除了山顶外其他位置也不能重叠。如果把王移到山顶
//       的获胜，问谁可以必胜。
//
// 题解：这题咋看很像某种staircase nim的变种，事实上也确实是某种变种。
//       我们先看偶数个的情况。如果面对这种状态(a1, a2), (a3, a4)...
//       没组内两个棋子相邻，那么对于后手肯定必胜，除了王在第一个位置
//       的情况。基本证明就是“以牙还牙，以眼还眼”的镜像操作，若把a1
//       移到山顶，则把a2也移到山顶。如果王 在某一组后一个，只需要模仿
//       移动某一组前一个的距离步数就行。如果在某一组前一个，其他一样，
//       当先手把前面的a1移到山顶时，把a2移到1号位置就行。
//
//       如果是奇数个棋子的情况，面对以下局面时(a1), (a2, a3), (a4, a5)...
//       每组内依旧紧邻。这时候先手必胜，因为只需要把a1拿到山顶然后就变成
//       上面的状态了。但是要注意的是如果王在a2，那么有点不一样，这时候需要
//       将a1移到山顶前一格(1号位置)，转化为nim模型的时候，第一堆(a1到山顶)，
//       需要留一个石子所以要将a1-1。
//
//       其他的就是将没组内距离作为一堆石子（ai - ai-1 - 1），然后做一次
//       nim（xor）就行。
//
// run: $exec < input
#include <iostream>

int const maxn = 1007;
int a[maxn];

int n, k;

int main()
{
	while (std::cin >> n >> k) {
		for (int i = 1; i <= n; i++) std::cin >> a[i];
		if (k == 1) { std::cout << "Alice\n"; continue; }
		if (k == 2 && n & 1) a[1]--; // 奇数个，王在第二位，前面第一堆要留一个（石子）
		int game = 0;
		for (int i = n; i > 1; i -= 2)
			game ^= a[i] - a[i - 1] - 1;
		if (n & 1) game ^= a[1];
		std::cout << (game ? "Alice" : "Bob") << '\n';
	}
}

